查看原文
其他

入门numpy(80%-100%)【解读numpy官方文档】

2017-07-29 王大伟 Python爱好者社区

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


点击上图即可限时半价购买课程

前言

这个numpy连载拖了挺久了,今天终于要更新完了!!!之后咱们可视化走起~


ix_()函数

ix_函数可以用于组合不同的向量,以获得每个的结果。 例如,如果要计算从每个向量a,b和c中获取的所有三元组的所有a + b * c:

import numpy as np

a = np.array([2,3,4,5])
b = np.array([8,5,4])
c = np.array([5,4,6,8,3])
ax,bx,cx = np.ix_(a,b,c)
ax

 

bx


cx


ax.shape, bx.shape, cx.shape


result = ax+bx*cx
result


注:通过函数将原来的一维数列组合都变成可以做某种运算的三维数组



注:两种等效的索引到三位数组的某元素


用字符串进行索引


参阅结构化数组:https://docs.scipy.org/doc/numpy-dev/user/basics.rec.html#structured-arrays


线性代数

基本的线性代数运算

有关更多信息,请参阅numpy文件夹中的linalg.py

import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
print(a)


注:创建一个矩阵a


a.transpose()


注:求a矩阵的转置


np.linalg.inv(a)


注:求a矩阵的逆矩阵


u = np.eye(2)
u


注:产生二阶单位矩阵


j = np.array([[0.0, -1.0], [1.0, 0.0]])
np.dot (j, j)

 

注:矩阵乘法


np.trace(u)


注:trace轨迹,这里指矩阵的迹,矩阵主对角元素之和


y = np.array([[5.], [7.]])
np.linalg.solve(a, y)


注:解形如ax=y的线性方程组所得的x


np.linalg.eig(j)


注:求j矩阵的特征值和特征向量


技巧和提示

这里我们列出一些简短有用的提示。

“自动”整形

要更改数组的尺寸,可以省略其中一个尺寸,然后自动推导出:

a = np.arange(30)
a.shape = 2,-1,3
a.shape


注:将a数组变形,参数-1表示根据情况自动计算出值


a


注:打印a矩阵


矢量堆叠


我们如何从同样大小的行向量的列表中构造2维数组? 在MATLAB中,这很简单:如果x和y是相同长度的两个向量,那么只需要m = [x; y]。 

在NumPy中,这可以通过函数column_stack,dstack,hstack和vstack来实现,具体取决于要进行堆叠的维度。

例如:

x = np.arange(0,10,2)            
y = np.arange(5)          
m = np.vstack([x,y])  
m


注:vstack意为vertical  stack按照竖直方向堆叠


xy = np.hstack([x,y])
xy


注:hstack意为horizontal  stack按照竖直方向堆叠


学matlab的学者对照学习numpy参考:

https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html


直方图

应用于数组的NumPy直方图函数返回一对向量:数组的直方图和bins的向量。

注意:matplotlib还具有构建与NumPy不同的直方图(称为hist,如在Matlab中)的功能。 

主要区别在于pylab.hist自动绘制直方图,而numpy.histogram仅生成数据。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# Build a vector of 10000 normal deviates with variance 0.5^2 and mean 2
mu, sigma = 2, 0.5
v = np.random.normal(mu,sigma,10000)
# Plot a normalized histogram with 50 bins
plt.hist(v, bins=50, normed=1)       # matplotlib version (plot)
plt.show()


注:这是matplotlib的hist方法画直方图,随机产生正态分布(均值为2,标准差为0.5)数据,然后画图


注意:加上%matplotlib inline 可以使图画在jupyter notebook中,而不是单独弹窗出一幅图(感谢秦路老师当时为我解答这个困惑)


(n, bins) = np.histogram(v, bins=50, normed=True)  # NumPy version (no plot)
plt.plot(.5*(bins[1:]+bins[:-1]), n)
plt.show()


注:numpy中的histogram方法生成数据,然后使用matplotlib的plot方法画图。

微课福利:Hellobi live |8月22日,利用 Python 建构金融数据分析平台

查看下图说明免费参加或者点击文末阅读原文参加

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。

长按指纹 > 识别图中二维码 > 添加关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存